package 作用域相关;

public class 指针类型 extends 符号 implements 类型{

    public 指针类型(类型 目标类型) {
        super(目标类型 + "*");
        this.目标类型 = 目标类型;
    }
    
    类型 目标类型;

    @Override
    public int 取类型索引() {
        return 类型索引.指针.索引;
    }

    @Override
    public boolean 是否能赋值到(作用域相关.类型 目标) {
        // 指针只能赋值给指针
        if (!(目标 instanceof 指针类型 指针)) return false;
        
        // 获取目标指针指向的类型
        var 目标指向类型 = 指针.目标类型;
        var 源指向类型 = 目标类型;
        
        // 如果两者都指向了 类 类型，那么就要执行多态检查
        if (目标指向类型 instanceof 类符号 源类 && 源指向类型 instanceof 类符号 目标类) {
            return 源类.是否是(目标类);            
        }
        
        // 其他情况就需要确保两个类型相等
        return 目标指向类型 == 源指向类型;
    }
}
